/**
 * 图片URL处理工具函数
 * 用于处理远程API返回的图片路径
 * 
 * 智能识别运行环境：
 * - 本地开发（localhost:3000）：将API返回的localhost替换为远程服务器地址
 * - 服务器部署（8.148.77.117）：保持API返回的地址不变
 */

/**
 * 检测当前是否在本地开发环境
 * @returns true表示本地环境，false表示生产环境
 */
function isLocalDevelopment(): boolean {
  // 服务端渲染时，使用环境变量判断
  if (typeof window === 'undefined') {
    return process.env.NODE_ENV === 'development'
  }
  
  // 客户端：检查当前访问的hostname
  const hostname = window.location.hostname
  return hostname === 'localhost' || hostname === '127.0.0.1' || hostname.startsWith('192.168.')
}

/**
 * 获取完整的图片URL
 * @param imagePath - API返回的图片路径
 * @returns 完整的图片URL
 */
export function getImageUrl(imagePath: string | undefined | null): string {
  // 调试日志
  if (typeof window !== 'undefined' && imagePath) {
    console.log('[getImageUrl] 输入:', imagePath)
  }

  if (!imagePath || typeof imagePath !== 'string') {
    // 返回默认占位图
    console.log('[getImageUrl] 返回默认图片: 空值或非字符串')
    return '/images/product-placeholder.jpg'
  }

  let url = imagePath.trim()

  // ===== 第1步：处理各种前缀错误 =====
  
  // 移除 @ 前缀（API可能返回 @http://...）
  if (url.startsWith('@')) {
    console.log('[getImageUrl] 检测到 @ 前缀，移除')
    url = url.substring(1)
  }
  
  // 移除 /http:// 或 /https:// 格式的错误路径
  if (url.startsWith('/http://') || url.startsWith('/https://')) {
    console.log('[getImageUrl] 检测到畸形URL，去除前导斜杠')
    url = url.substring(1)
  }

  // ===== 第2步：提取 /crmebimage/ 路径（核心逻辑）=====

  // 尝试从URL中提取 /crmebimage/ 路径
  const crmebimageMatch = url.match(/\/crmebimage\/.*$/)

  if (crmebimageMatch) {
    // 检查是否包含需要替换的域名/IP（兼容38080和38081端口）
    const needsExtraction =
      url.includes('localhost:') ||           // localhost:38080 或 localhost:38081
      url.includes('8.148.77.117:38080') ||   // 管理端口38080
      url.includes('8.148.77.117:38081') ||   // 前端端口38081
      url.includes('192.168.') ||             // 内网IP（如 192.168.1.141）
      url.includes('127.0.0.1:')              // 本地IP

    if (needsExtraction) {
      const path = crmebimageMatch[0]
      console.log('[getImageUrl] 提取路径:', url, '->', path)
      return path  // 返回 /crmebimage/... 使用Nuxt代理（统一转发到38081）
    }
  }

  // ===== 第3步：处理其他URL格式 =====
  
  // 如果已经是外部完整URL（不包含我们的服务器），直接返回
  if (url.startsWith('http://') || url.startsWith('https://')) {
    console.log('[getImageUrl] 外部URL，直接返回:', url)
    return url
  }

  // ===== 第4步：处理相对路径 =====
  
  // 相对路径处理：确保以 / 开头
  let path = url
  if (!path.startsWith('/')) {
    path = `/${path}`
  }

  // 如果路径包含 crmebimage，直接返回（使用代理）
  if (path.includes('/crmebimage/')) {
    console.log('[getImageUrl] 相对路径 -> 代理路径:', path)
    return path
  }

  // 其他相对路径，拼接服务器地址
  try {
    const config = useRuntimeConfig()
    const baseUrl = config.public.apiAdminBase || 'http://8.148.77.117:38081'
    const result = `${baseUrl}${path}`
    console.log('[getImageUrl] 其他路径 -> 完整URL:', result)
    return result
  } catch (e) {
    // SSR时可能失败，直接返回路径
    console.log('[getImageUrl] SSR模式，返回相对路径:', path)
    return path
  }
}

/**
 * 处理JSON数组格式的图片字符串
 * 例如：'["/path/to/image1.png", "/path/to/image2.png"]'
 * @param imagesStr 图片JSON字符串
 * @returns 图片URL数组
 */
export function parseImagesFromJson(imagesStr: string | undefined | null): string[] {
  if (!imagesStr || typeof imagesStr !== 'string') return []
  
  try {
    // 尝试直接解析JSON
    const parsed = JSON.parse(imagesStr)
    if (Array.isArray(parsed)) {
      return parsed.map(path => getImageUrl(path)).filter(Boolean)
    }
    return []
  } catch (e) {
    // 如果不是标准JSON，尝试手动处理
    const cleaned = imagesStr
      .replace(/[\[\]"]/g, '') // 移除 [ ] "
      .split(',')
      .map(path => path.trim())
      .filter(path => path.length > 0)
    
    return cleaned.map(path => getImageUrl(path)).filter(Boolean)
  }
}

/**
 * 获取图片数组中的第一张图片
 * @param images 图片字段（可能是JSON字符串或数组）
 * @returns 第一张图片的完整URL
 */
export function getFirstImage(images: string | string[] | undefined | null): string {
  if (typeof window !== 'undefined') {
    console.log('[getFirstImage] 输入:', images)
  }

  if (!images) {
    console.log('[getFirstImage] 空值，返回空字符串')
    return ''
  }
  
  // 如果是数组
  if (Array.isArray(images)) {
    console.log('[getFirstImage] 数组格式，取第一个元素')
    return images.length > 0 ? getImageUrl(images[0]) : ''
  }
  
  // 如果是字符串
  if (typeof images === 'string') {
    console.log('[getFirstImage] 字符串格式，尝试解析JSON')
    // 尝试解析为JSON数组
    const parsedImages = parseImagesFromJson(images)
    console.log('[getFirstImage] 解析结果:', parsedImages)
    return parsedImages.length > 0 ? parsedImages[0] : getImageUrl(images)
  }
  
  console.log('[getFirstImage] 未知格式，返回空字符串')
  return ''
}

/**
 * 获取商品图片URL
 * @param product - 商品对象
 * @returns 商品图片URL
 */
export function getProductImageUrl(product: any): string {
  // 优先使用 image 字段
  if (product?.image) {
    return getImageUrl(product.image)
  }

  // 其次使用 imageUrl 字段
  if (product?.imageUrl) {
    return getImageUrl(product.imageUrl)
  }

  // 再次使用 productImage 字段
  if (product?.productImage) {
    return getImageUrl(product.productImage)
  }

  // 处理 images 字段（可能是JSON字符串或数组）
  if (product?.images) {
    const firstImage = getFirstImage(product.images)
    if (firstImage) {
      return firstImage
    }
  }

  // 返回默认占位图
  return '/images/product-placeholder.jpg'
}

/**
 * 获取商户图片URL
 * @param merchant - 商户对象
 * @returns 商户图片URL
 */
export function getMerchantImageUrl(merchant: any): string {
  if (merchant?.logo) {
    return getImageUrl(merchant.logo)
  }

  if (merchant?.avatarUrl) {
    return getImageUrl(merchant.avatarUrl)
  }

  return '/images/merchant-placeholder.jpg'
}

/**
 * 获取用户头像URL
 * @param user - 用户对象
 * @returns 用户头像URL
 */
export function getUserAvatarUrl(user: any): string {
  if (user?.avatar) {
    return getImageUrl(user.avatar)
  }

  if (user?.avatarUrl) {
    return getImageUrl(user.avatarUrl)
  }

  return '/images/avatar-default.png'
}

/**
 * 批量处理图片URL
 * @param images - 图片路径数组
 * @returns 完整URL数组
 */
export function getImageUrls(images: (string | undefined | null)[]): string[] {
  if (!images || !Array.isArray(images)) {
    return []
  }

  return images
    .filter(img => img) // 过滤掉空值
    .map(img => getImageUrl(img))
}

/**
 * 获取背景图片样式
 * @param imagePath - 图片路径
 * @returns CSS background-image 样式
 */
export function getBackgroundImageStyle(imagePath: string | undefined | null): string {
  const url = getImageUrl(imagePath)
  return `background-image: url('${url}')`
}

